package com.situ.mall.web.interceptor;

import com.situ.mall.common.exception.NoLoginException;
import com.situ.mall.common.util.RequestUtil;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author yangkx
 * @create 2023-09-19-14:02
 */
//登录校验拦截器
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object o = RequestUtil.getCurrent();
        //没登陆,重定向到登陆页面
        if (o == null){
            //是ajax请求（table小工具解析不了HTML页面）就抛异常，返回401错误码;不是ajax请求就重定向
            if (isAjax(request)){
                throw new NoLoginException();
            }else {
                response.sendRedirect("/login");
            }
        }
        //登陆过，返回true，放行
        return o != null;
    }

    //判断请求是不是ajax请求：是ajax返回true，不是ajax返回false
    private boolean isAjax(HttpServletRequest request){
        //从请求头里面取这个参数的值
        String s = request.getHeader("X-Requested-With");
        //直接用一个写死的值，去比较取到的值，这样可以有效避免空指针异常
        return "XMLHttpRequest".equals(s);
    }
}
